package fr.esisar.cs420.graphproj;

import java.awt.BorderLayout;
import java.awt.Color; 
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;

import javax.swing.JPanel;

import fr.esisar.cs420.graphproj.Photo.localisation;
import fr.esisar.cs420.graphproj.Photo.type;

public class Window extends JFrame implements ActionListener{

	/**
	 * Instance du modèle du programme: On y fera appel pour chaque action
	 */
	Controleur engine;
	
	/**
	 * Attributs de la classe
	 */
	private static final long serialVersionUID = 1L;
	
	// Aperçu Photo
	Photo photoPreview = new Photo(), photoPicture = new Photo();
	Document documentPreview = new Document();
	
	// Création des icones
	private ImageIcon iOpen = new ImageIcon("img/m/folder.png"),
			iSearch = new ImageIcon("img/m/gear.png"),
			iQuit = new ImageIcon("img/m/warning.png"),
			iSite = new ImageIcon("img/m/globe.png"),
			iAbout = new ImageIcon("img/m/label.png"),
			iLeft = new ImageIcon("img/m/larrow.png"),
			iRight = new ImageIcon("img/m/rarrow.png");
	
	// Création d'images d'upload
	private ImageIcon uploadedPic = new ImageIcon("img/pic.png");
	
	// Création des strings d'information
	private StringBuilder info = new StringBuilder();
	private String sDBDD = new String("Connexion to Database was refused.."),
			sDUSER = new String("Public access only"),
			sLUSER = new String("Creating your new account... Wait for anwser"),
			sAbout = new String("ESISAR App by Blot, Bocquet and Compeau"),
			sTopAlbum = new String("Album search results:"),
			sTopBook = new String("Book search results:"),
			sTopAll = new String("Search results:");
	
	// Création des conteneurs
	private JTabbedPane fContent = new JTabbedPane();
	private JPanel fConnect = new JPanel(new FlowLayout(FlowLayout.LEFT)),
			fState = new JPanel(new FlowLayout()),
			fSearch = new JPanel(new FlowLayout()),
			fPicture = new JPanel(new FlowLayout()),
			fPreview = new JPanel(new BorderLayout()),
			fLegend = new JPanel(new BorderLayout());
	private JSplitPane vSplit = new JSplitPane(JSplitPane.VERTICAL_SPLIT, fConnect, fState),
			lSplit = new JSplitPane(JSplitPane.VERTICAL_SPLIT, fPreview, fLegend),
			hSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, vSplit, fContent);
	
	// Création d'un menu
	  // Barre du menu
	  private JMenuBar menuBar = new JMenuBar();
	  // Premier menu
	  private JMenu mEl1 = new JMenu("Create"); // m = menu el = element
	  	// éléments du menu 1
	  	private JMenuItem sm1El1 = new JMenuItem("A Book"); // sm = sous menu el = element
	  	private JMenuItem sm1El2 = new JMenuItem("An Album");
	  // Second menu
	  private JMenu mEl2 = new JMenu("Search");
	  	// éléments du menu 2
	  	private JMenuItem sm2El1 = new JMenuItem("for Pics");
	  	private JMenuItem sm2El2 = new JMenuItem("for Albums");
	  	private JMenuItem sm2El3 = new JMenuItem("for Books");
	  	private JMenuItem sm2El4 = new JMenuItem("for All");
	  // Troisième menu
	  private JMenu mEl3 = new JMenu("Help");
	  	// éléments du menu 3
	  	private JMenuItem sm3El1 = new JMenuItem("Web Site");
	  	private JMenuItem sm3El2 = new JMenuItem("About");
	  	private JMenuItem sm3El3 = new JMenuItem("Exemple Album");
	  	private JMenuItem sm3El4 = new JMenuItem("Exemple Livre");
	  
	  // Quatrième menu
	  private JMenuItem mEl4 = new JMenuItem("Command current Preview");
	  
	  // Cinquiète "menu"
	  private JMenuItem mEl5 = new JMenuItem("Quit this App");
	  
	  // Affichages d'objets dans le panel Connect
	  private JButton p1B1 = new JButton("Sign In"); // Panel 1 Button 1
	  private JButton p1B2 = new JButton("Sign Out");
	  private JButton p1B3 = new JButton("Subscribe");
	  private JTextField p1E1 = new JTextField("UserName"); // Panel 1 Entry 1
	  private JTextField p1E2 = new JTextField("Password");
	  
	  private JLabel p1L1 = new JLabel("Link State:");
	  private JLabel p1L2 = new JLabel(sDBDD);
	  private JLabel p1L3 = new JLabel("Identification State:");
	  private JLabel p1L4 = new JLabel(sDUSER);
	  private JLabel p1L5 = new JLabel("");
	  
	  // Affichage d'objets dans le panel State
	  private JLabel p2L1 = new JLabel("Here you can add your pictures!");
	  private JLabel p2L2 = new JLabel(sAbout);
	  private JButton p2B1 = new JButton(uploadedPic);
	  private JButton p2B2 = new JButton("Browse your pics");
	  private JButton p2B3 = new JButton("Upload It");
	  
	  // Affichage d'objets dans le panel Results
	  private JLabel p3L1 = new JLabel("Choose something to do!");
	  private JButton p3B1 = new JButton("Open a document!");
	  
	  // Affichage d'objets dans le panel My Pics
	  private JLabel p4L1 = new JLabel("Here are your online pics, which you can use to complete albums or books");
	  //private JLabel p4L2 = new JLabel();
	  private JTextField p4E1 = new JTextField("Write your Title");
	  private JTextField p4E2 = new JTextField("Write your Comment");
	  private JTextField p4E3 = new JTextField("Pic's number");
	  private JButton p4B1 = new JButton("Add it to Preview");
	  
	  // Affichage d'objets dans le panel Preview
	  private JLabel p5L1 = new JLabel(" ");
	  private JLabel p5L2 = new JLabel(" ");
	  private JLabel p5L3 = new JLabel(" ");
	  private JLabel p5L4 = new JLabel(documentPreview.getLegend());
	  private JButton p5B1 = new JButton(iLeft);
	  private JButton p5B2 = new JButton(iRight);
	  
	/**
	 * Méthodes de la classe
	 */
	// Le constructeur dessine l'interface de base, sans la lancer
	public Window(){
		// Lancement du moteur de l'application
		engine = new Controleur(info);
		p1L2.setText(info.toString());

		// Paramètres de base
		this.setTitle("Picks' it");
		this.setResizable(false);
		this.setSize(1024, 700);
	    this.setLocationRelativeTo(null);
	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    
	    // Paramètrage Conteneur
	    hSplit.setDividerLocation(240);
		hSplit.setResizeWeight(0.5);
		hSplit.setDividerSize(0);
		vSplit.setDividerLocation(150);
		hSplit.setDividerSize(0);
		lSplit.setDividerLocation(550);
		fContent.add(fSearch,"Results");
		fContent.add(fPicture,"My Pics");
		fContent.add(lSplit,"Preview");
	    
		// BG
		fState.setBackground(new Color(251,248,203));
		fPreview.setBackground(Color.DARK_GRAY);
		fSearch.setBackground(Color.DARK_GRAY);
		fPicture.setBackground(Color.DARK_GRAY);
		fLegend.setBackground(Color.DARK_GRAY);
		
		// Images & Actions
		sm1El1.addActionListener(this);
		sm1El2.addActionListener(this);
		sm2El1.addActionListener(this);
		sm2El2.addActionListener(this);
		sm2El3.addActionListener(this);
		sm2El4.addActionListener(this);
		sm3El1.addActionListener(this);
		sm3El2.addActionListener(this);
		sm3El3.addActionListener(this);
		
		// Actions menu
		mEl4.addActionListener(this);
		mEl5.addActionListener(this);
		
		// Connexion des sous menus et menus
			// Menu 1
			mEl1.setIcon(iOpen);
			mEl1.add(sm1El1); // sm = sous menu, el = element
			mEl1.add(sm1El2);
			// Menu 2
			mEl2.setIcon(iSearch);
			mEl2.add(sm2El1);
			mEl2.add(sm2El2);
			mEl2.add(sm2El3);
			mEl2.add(sm2El4);
			// Menu 3
			mEl3.setIcon(iSite);
			mEl3.add(sm3El1);
			mEl3.add(sm3El2);
			mEl3.add(sm3El3);
			mEl3.add(sm3El4);
			// Menu 4
			mEl4.setIcon(iAbout);
			// Menu 5
			mEl5.setIcon(iQuit);
		
		// Connexion des différents menus à la barre de menu
		menuBar.add(mEl1);
		menuBar.add(mEl2);
		menuBar.add(mEl3);
		menuBar.add(mEl4);
		menuBar.add(mEl5);
		
		// Ajout de la barre de menu à la fenêtre
		this.setJMenuBar(menuBar);
		
		// Affichage pour Connect
			// Bouton 1
			p1B1.addActionListener(this);
			fConnect.add(p1B1);
			// Bouton 2
			p1B2.addActionListener(this);
			fConnect.add(p1B2);
			// Bouton 3
			p1B3.addActionListener(this);
			fConnect.add(p1B3);
			// Entrée Texte 1
			p1E1.setToolTipText("You ID is your E-mail");
			p1E1.setPreferredSize(new Dimension(100,25));
			fConnect.add(p1E1);
			// Entrée Texte 2
			p1E2.setToolTipText("Your private password");
			p1E2.setPreferredSize(new Dimension(100,25));
			fConnect.add(p1E2);
			// Label 1
			fConnect.add(p1L1);
			// Label 2
			p1L2.setForeground(Color.red);
			fConnect.add(p1L2);
			// Label 3
			fConnect.add(p1L3);
			// Label 4
			p1L4.setForeground(Color.red);
			fConnect.add(p1L4);
			// Label 5
			p1L5.setForeground(Color.blue);
			fConnect.add(p1L5);
		
		// Affichage pour State
			// Label 1
			fState.add(p2L1);
			// Bouton 1
			p2B1.setPreferredSize(new Dimension(128,128));
			p2B1.addActionListener(this);
			fState.add(p2B1);
			// Bouton 2
			p2B2.addActionListener(this);
			fState.add(p2B2);
			// Bouton 3
			p2B3.addActionListener(this);
			p2B3.setVisible(false);
			fState.add(p2B3);
			// Label 2
			p2L2.setForeground(Color.blue);
			p2L2.setVisible(false);
			fState.add(p2L2);
		
		// Affichages dans Results
			// Label 1
			p3L1.setForeground(Color.white);
			p3L1.setHorizontalAlignment(SwingConstants.CENTER);
			fSearch.add(p3L1);
			// Bouton 1
			p3B1.setPreferredSize(new Dimension(500,25));
			p3B1.addActionListener(this);
		
		// Affichages dans My Pics
			// Label 1
			p4L1.setForeground(Color.white);
			p4L1.setHorizontalAlignment(SwingConstants.CENTER);
			p4B1.addActionListener(this);
			
		// Affichages dans Preview
			// Label 1
			p5L1.setForeground(Color.white);
			p5L1.setHorizontalAlignment(SwingConstants.CENTER);
			fPreview.add(p5L1,BorderLayout.NORTH);
			// Label 2
			p5L2.setPreferredSize(new Dimension(500,500));
			p5L2.setHorizontalAlignment(SwingConstants.CENTER);
			fPreview.add(p5L2,BorderLayout.CENTER);
			// Flèche précédent
			p5B1.setPreferredSize(new Dimension(50,50));
			fLegend.add(p5B1,BorderLayout.WEST);
			p5B1.addActionListener(this);
			// Flèche Suivant
			p5B2.setPreferredSize(new Dimension(50,50));
			fLegend.add(p5B2,BorderLayout.EAST);
			p5B2.addActionListener(this);
			// Label 3
			p5L3.setForeground(Color.white);
			p5L3.setHorizontalAlignment(SwingConstants.CENTER);
			fPreview.add(p5L3,BorderLayout.SOUTH);
			// Label 4
			p5L4.setForeground(Color.white);
			p5L4.setHorizontalAlignment(SwingConstants.CENTER);
			fLegend.add(p5L4,BorderLayout.CENTER);
			// Affichage par défaut d'une photo
			showPreview();
			fContent.setSelectedComponent(lSplit);
		
		// Intégration du panel dans la fenêtre
	    this.getContentPane().add(hSplit);
	  }
	
	// Démarrer l'interface graphique
	public void launch(){
		this.setVisible(true);
	}

	// Thème de l'interface Graphique
	 public static void setBestLookAndFeelAvailable(){
		   String system_lf = UIManager.getSystemLookAndFeelClassName().toLowerCase();
		   if(system_lf.contains("metal")){
		       try {
		           UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		       } catch (Exception e) {}
		   }else{
		       try {
		           UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		       } catch (Exception e) {}
		   }
		 }
	
	 // Ensemble des méthodes lancées lors de l'appui sur un bouton de l'interface
	 public void actionPerformed(ActionEvent e){
		 if(e.getSource()==sm1El2){
			 System.out.println("Appel création d'album");
			 
			 // Récupération des données nécessaires à la création d'un nouvel album
			 JOptionPane.showMessageDialog(null,"You'll be asked a few questions about your new Album","Information",JOptionPane.INFORMATION_MESSAGE);
			 String s1 = JOptionPane.showInputDialog(null, "Please write the title of your new Album:", "Title of your new Album", JOptionPane.INFORMATION_MESSAGE);
			 String s2 = JOptionPane.showInputDialog(null, "Please write the subtitle of your new Album:", "Subtitle of your new Album", JOptionPane.INFORMATION_MESSAGE);
			 String s3 = JOptionPane.showInputDialog(null, "Do you want it to be available to everyone or only you? (yes or no)", "Available to Public", JOptionPane.INFORMATION_MESSAGE);
			 
			 // Essai de création d'un nouvel album
			 try{
				 // Création d'album pour tout le monde ou seulement l'utilisateur
				 if(s3.contentEquals("yes")) engine.newAlbum(s1, s2, 1, info);
				 else engine.newAlbum(s1,s2,0,info);
				 
				 // Affichage du nouvel album créé
				 JOptionPane.showMessageDialog(null, info);
				 //fContent.setSelectedComponent(fCreate);	 
			 } catch(Exception eCAlbum) {
				 JOptionPane.showMessageDialog(null, info, "Error when creating new Album", JOptionPane.WARNING_MESSAGE);
			 }
		 }
		 if(e.getSource()==sm1El1){
			 System.out.println("Appel création de livre");
			 
			 // Récupération des données nécessaires à la création d'un nouveau livre
			 JOptionPane.showMessageDialog(null,"You'll be asked a few questions about your new Book","Information",JOptionPane.INFORMATION_MESSAGE);
			 String s1 = JOptionPane.showInputDialog(null, "Please write the title of your new Book:", "Create your book: 1 on 5", JOptionPane.INFORMATION_MESSAGE);
			 String s2 = JOptionPane.showInputDialog(null, "Please write the subtitle of your new Book:", "Create your book: 2 on 5", JOptionPane.INFORMATION_MESSAGE);
			 String s3 = JOptionPane.showInputDialog(null, "Do you want it to be available to everyone or only you? (yes or no)", "Create your book: 3 on 5", JOptionPane.INFORMATION_MESSAGE);
			 String s4 = JOptionPane.showInputDialog(null, "Write what you'd like to see on the beginning of your book", "Create your book: 4 on 5", JOptionPane.INFORMATION_MESSAGE);
			 String s5 = JOptionPane.showInputDialog(null, "Write what you'd like to see on the end of your book", "Create your book: 5 on 5", JOptionPane.INFORMATION_MESSAGE);
			 
			 // Essai de création d'un nouveau livre
			 try{
				 // Création d'album pour tout le monde ou seulement l'utilisateur
				 if(s3.contentEquals("yes")) engine.newLivre(s1,s2,1,s4,s5,info);
				 else engine.newLivre(s1,s2,0,s4,s5,info);
				 JOptionPane.showMessageDialog(null, info, "Information", JOptionPane.INFORMATION_MESSAGE);
			 } catch(Exception eCLivre) {
				 JOptionPane.showMessageDialog(null, info, "Error when creating a Book", JOptionPane.WARNING_MESSAGE);
			 }
		 }
		 // Appel Recherche Photos
		 if(e.getSource()==sm2El1){
			 System.out.println("Appel recherche photos");
			 fContent.setSelectedComponent(fPicture);
		 }
		 // Appel Recherche d'albums
		 if(e.getSource()==sm2El2){
			 System.out.println("Appel recherche d'albums");
			 showSearch(0);
			 fContent.setSelectedComponent(fSearch);
			 p3L1.setText(sTopAlbum);
		 }
		 // Appel Recherche de livres
		 if(e.getSource()==sm2El3){
			 System.out.println("Appel recherche de livres");
			 showSearch(1);
			 fContent.setSelectedComponent(fSearch);
			 p3L1.setText(sTopBook);
		 }
		 // Appel Recherche Globale
		 if(e.getSource()==sm2El4){
			 System.out.println("Appel recherche globale");
			 showSearch(2);
			 fContent.setSelectedComponent(fSearch);
			 p3L1.setText(sTopAll);
		 }
		 // Appel Site
		 if(e.getSource()==sm3El1) {
			 System.out.println("Appel site");
			 Desktop desktop = null;
			 java.net.URI url;
			 try {
				 url = new java.net.URI("http://compeau-pl.fr/esisar/picks/"); 
				 if (Desktop.isDesktopSupported()){
					 desktop = Desktop.getDesktop();
					 desktop.browse(url); 
				 } 
			 } 
			 catch (Exception ex) {}
		 }
		 // Appel à propos
		 if(e.getSource()==sm3El2){
			 System.out.println("Appel a propos");
			 p2L2.setVisible(true);
		 }
		 // Appel exemple d'album
		 if(e.getSource()==sm3El3){
			 System.out.println("Appel à exemple d'album");
			 createAlbumExample();
			 showPreview();
			 fContent.setSelectedComponent(lSplit);
		 }
		 // Appel exemple de livre
		 if(e.getSource()==sm3El4){
			 System.out.println("Appel à exemple de livre");
			 createBookExample();
			 showPreview();
			 fContent.setSelectedComponent(lSplit);			 
		 }
		 // Appel Connexion
		 if(e.getSource()==p1B1) { 
			 System.out.println("Appel Connexion");
			 try{
				 engine.connectionClient(p1E1.getText(), p1E2.getText(), info);
				 showPic();
				 p1L4.setText(info.toString());
			 } catch( Exception errConnect) { p1L4.setText(info.toString()); }
		 }
		 // Appel déconnexion
		 if(e.getSource()==p1B2){
			 System.out.println("Appel Deconnexion");
			 try{
				 engine.deconnectionClient(info);
				 fPicture.removeAll();
				 p1L4.setText(info.toString());
			 } catch( Exception erDeco) { p1L4.setText(info.toString()); }
		 }
		 if(e.getSource()==p1B3){
			 System.out.println("Appel Inscription");
			 // Ajout Boite de dialogue
			 JOptionPane.showMessageDialog(null, "You're nearly registered! Now you'll be asked about a few more things...", "Subscribing Form:",
					 JOptionPane.INFORMATION_MESSAGE);
			 String surname = JOptionPane.showInputDialog(null, "1°: Write your surname here", "Subscribing: form number 1 on 3",
					 JOptionPane.QUESTION_MESSAGE);
			 String name = JOptionPane.showInputDialog(null, "2°: Write your name here", "Subscribing: form number 2 on 3",
					 JOptionPane.QUESTION_MESSAGE);
			 String address = JOptionPane.showInputDialog(null, "3° Write your mail address here", "Subscribing: form number 3 on 3",
					 JOptionPane.QUESTION_MESSAGE);
			 // Message d'attente
			 p1L5.setText(sLUSER);
			 try{
				 engine.inscription(p1E1.getText(), p1E2.getText(), surname, name, address, info);
				 p1L5.setText(info.toString());
			 } catch(Exception erP1B3) { p1L5.setText("Database not available.. You're not registered"); }
		 }
		 if(e.getSource()==p2B1){
			 fContent.setSelectedComponent(lSplit);
		 }
		 if(e.getSource()==p2B2){
			 try{ browseFile();
				  showMinPhoto();
				  showPreview();
				  fContent.setSelectedComponent(lSplit);
				  p2B3.setVisible(true);
			 }catch(Exception er_p2B2){ System.out.println("Erreur de récupération du fichier"); }
		 }
		 if(e.getSource()==p2B3){
			 try{
				engine.upload(photoPreview.getDir(),photoPreview.getPhotoName(), null, null, 0, null, 0, 0, null,info);
				showPic();
				JOptionPane.showMessageDialog(null,info,"Information",JOptionPane.INFORMATION_MESSAGE);
			 }catch(Exception err){ JOptionPane.showMessageDialog(null,info,"Information",JOptionPane.INFORMATION_MESSAGE);}
		 }
		 if(e.getSource()==mEl5){
			 System.out.println("Appel fermeture");
			 System.exit(0);
		 }
		 if(e.getSource()==p3B1) {
			 try{
				 String da = JOptionPane.showInputDialog(null, "Give the number of the document","Open a document",JOptionPane.INFORMATION_MESSAGE);
				 //System.out.println("Essai:" +da);
				 if(Document.goTo(Integer.parseInt(da), documentPreview)!=null){
					 if( (documentPreview = Document.goTo(Integer.parseInt(da), documentPreview)) !=null ){
						 photoPreview = engine.getDocumentPhotos(documentPreview.getId(),documentPreview.getType(),info);
						 photoPreview = Photo.getFirst(photoPreview);
						 showPreview();
						 fContent.setSelectedComponent(lSplit);
					 }
					 else JOptionPane.showMessageDialog(null, "The number you asked for doesn't exist","Information",JOptionPane.INFORMATION_MESSAGE);
				 }
				 else JOptionPane.showMessageDialog(null, "The number you asked for doesn't exist","Information",JOptionPane.INFORMATION_MESSAGE);
			 }catch(Exception err){ JOptionPane.showMessageDialog(null, info,"Error", JOptionPane.WARNING_MESSAGE); } 
		 }
		 if(e.getSource()==p4B1) {
			 if(documentPreview!=null&&photoPicture!=null&&documentPreview.getId()!=0){
				 try{ engine.ajoutPhoto(documentPreview.getId(), Photo.goTo(Integer.parseInt(p4E3.getText()), photoPicture).getPhotoName(), p4E1.getText(), p4E2.getText(), info);}
				 catch(Exception errAP) { JOptionPane.showMessageDialog(null, info,"Error",JOptionPane.WARNING_MESSAGE); }
			 }
			 else
			 {
				 JOptionPane.showMessageDialog(null, "First you need to open a book or en album","Information",JOptionPane.INFORMATION_MESSAGE);
			 }
		 }
		 if(e.getSource()==p5B1) showPrecPreview();
		 if(e.getSource()==p5B2) showNextPreview();
	 }
	 
	 /**
	  * Ouvre un gestionnaire d'arborescence Windows/Linux pour aller chercher une image
	  */
	 public void browseFile(){
		 // Création d'une boite de parcours de fichiers, avec filtres à image
		 final JFileChooser fc = new JFileChooser();
		 fc.addChoosableFileFilter(new FiltreSimple("GIF",".gif"));
		 fc.addChoosableFileFilter(new FiltreSimple("Bitmap",".bmp"));
		 fc.addChoosableFileFilter(new FiltreSimple("PNG",".png"));
		 fc.addChoosableFileFilter(new FiltreSimple("JPEG",".jpg"));
		 
		 // Affichage
         fc.showOpenDialog(this);
         
         // Renvoi de l'adresse de l'image sélectionnée
         photoPreview = new Photo(fc.getCurrentDirectory().toString(),fc.getSelectedFile().getName());
	 }

	 /**
	  * Redimensionne l'image à la hauteur et largeur demandée
	  * @param src l'adresse de l'image
	  * @param width longueur de l'image
	  * @param height hauteur de l'image
	  * @return l'image redimensionnée
	  */
	 public static ImageIcon scaleImage(String src, int width, int height) {
		    BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
		    Graphics2D g = (Graphics2D) img.getGraphics();
		    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
		    g.drawImage(new ImageIcon(src).getImage(), 0, 0, width, height, null);
		    g.dispose();
		    return new ImageIcon(img);
	}
	 
	 /**
	  * Passer l'onglet Preview de l'application à l'image précédente s'il y en a une
	  */
	 public void showPrecPreview(){
		 if(photoPreview.getPrecPhoto()!=null){
			 photoPreview = photoPreview.getPrecPhoto();
			 showPreview();
		 }
	 }
	 
	 /**
	  * Passer l'onglet Preview de l'application à l'image suivante s'il y en a une
	  */
	 public void showNextPreview(){
		 if(photoPreview.getNextPhoto()!=null){
			 photoPreview = photoPreview.getNextPhoto();
			 showPreview();
		 }
	 }
	 
	 /**
	  * Redimensionner et afficher l'instance Photo courante dans l'onglet Preview
	  */
	 public void showPreview(){
		 // Affichage de la nouvelle photo courante
		 p5L2.setIcon(scaleImage(photoPreview.getFileDir(),600,400));
		 p5L1.setText("Photo n°"+photoPreview.getNumber()+": "+photoPreview.getTitle());
		 p5L3.setText(photoPreview.getCom());
	 }
	 
	 /**
	  * Afficher à l'utilisateur une image redimensionnée de ce qu'il vient de récupérer de son ordinateur
	  */
	 public void showMinPhoto(){
		 p2B1.setIcon(scaleImage(photoPreview.getFileDir(),128,128));
	 }
	 
	 /**
	  * Remplir l'onglet d'Images distantes de l'utilisateur
	  */
	 public void showPic(){
		 // Tout enlever du conteneur
		fPicture.removeAll();
	 	// Label 1
		fPicture.add(p4L1);
		// Entry 1
		fPicture.add(p4E1);
		// Entry 2
		fPicture.add(p4E2);
		// Entry 3
		fPicture.add(p4E3);
		// Bouton 1
		fPicture.add(p4B1);
		
		// Récupération des photos de l'utilisateur sur la BDD
		try{
			JLabel temp;
			JPanel pan;
			Photo tempP;
			photoPicture = engine.getAccountPhotos(info);
			tempP = photoPicture;
			while(photoPicture!=null){
				// Création d'un "panel de présentation"
				pan = new JPanel(new FlowLayout());
				pan.setPreferredSize(new Dimension(130,150));
				
				// Ajout de l'image au panel
				System.out.println(photoPicture.getFileDir());
				temp = new JLabel();
				temp.setIcon(scaleImage(photoPicture.getFileDir(),128,128));
				pan.add(temp);
				
				// Ajout du label au panel
				temp = new JLabel("n°"+photoPicture.getId());
				temp.setHorizontalAlignment(SwingConstants.CENTER);
				pan.add(temp);
				
				// Ajout du panel à la frame My Pics
				fPicture.add(pan);
				
				// Passage à la photo suivante s'il y a
				photoPicture = photoPicture.getNextPhoto();
			}
			photoPicture = tempP;
		} catch( Exception erPics) { JOptionPane.showMessageDialog(null,info,"Information",JOptionPane.INFORMATION_MESSAGE); }
	 }
	 
	 /**
	  * Remplir l'onglet de recherche en fonction de la demande de l'utilisateur
	  * @param t 0 si album 1 si livre autre si recherche globale
	  */
	 public void showSearch(int t){
		// Nettoyage de la frame de recherche
		fSearch.removeAll();
		fSearch.add(p3L1);
		fSearch.add(p3B1);
		
		// Demande de recherche publique ou privée
		String s1 = JOptionPane.showInputDialog(null,"Yours or Everyone's? (mine, public)","Search Parameters",JOptionPane.INFORMATION_MESSAGE);
	 	
		// Recherche de tous les livres et/ou albums
		try{
	 	 Document doc = null;
	 	 JPanel pan;
	 	 JLabel temp;
		 switch(t){
		 	case 0:
		 		if(s1.contentEquals("mine")) doc = engine.getAccountAlbum(info);
		 		else doc = engine.getPublicAlbum(info);
		 		break;
		 	case 1:
		 		if(s1.contentEquals("mine")) doc = engine.getAccountLivres(info);
		 		else doc = engine.getPublicLivres(info);
		 		break;
		 	default:
		 		if(s1.contentEquals("mine")) doc = engine.getAccountAllDocuments(info);
		 		else doc = engine.getPublicDocuments(info);
		 }
		 doc = Document.getFirst(doc);
		 documentPreview = doc;
		 
		 // Affichage de tous les livres et/ou albums
		 while(doc!=null){
			 pan = new JPanel();
			 pan.setPreferredSize(new Dimension(200,25));
			 temp = new JLabel("       Document n°"+doc.getId()+": "+doc.getTitle());
			 temp.setHorizontalAlignment(SwingConstants.CENTER);
			 pan.add(temp);
			 fSearch.add(pan);
			 doc = doc.getNext();
		 }
 		} catch( Exception errSAl) { JOptionPane.showMessageDialog(null,info,"Search Error",JOptionPane.WARNING_MESSAGE); }
	 }
	 
	 /**
	  * Affichage d'un album 
	  */
	 public void createAlbumExample(){
		 Photo p = new Photo(0,type.Album, localisation.Exemple, null, "01.jpg", "Premiere photo de l'album, qu'elle est belle!", "Pas de commentaire pour cette premiere photo!");
		 photoPreview = p;	 
		 
		 p = new Photo(0,type.Album, localisation.Exemple, p, "02.jpg", "2ième", "No Com");
		 p = new Photo(0,type.Album, localisation.Exemple, p, "03.jpg", "3ième", "No Com");
		 p = new Photo(0,type.Album, localisation.Exemple, p, "04.jpg", "4ième", "No Com");
		 p = new Photo(0,type.Album, localisation.Exemple, p, "05.jpg", "5ième", "No Com");
		 p = new Photo(0,type.Album, localisation.Exemple, p, "06.jpg", "6ième", "No Com");
		 p = new Photo(0,type.Album, localisation.Exemple, p, "07.jpg", "7ième", "No Com");
		 p = new Photo(0,type.Album, localisation.Exemple, p, "08.jpg", "8ième", "No Com");
		 p = new Photo(0,type.Album, localisation.Exemple, p, "09.jpg", "9ième", "No Com");
	 }
	 
	 // Création d'un exemple de livre
	 public void createBookExample(){
		 
	 }
}
